Einlesen von Datendateien
Humboldt-Universität zu Berlin
2023-05-09
Letzte Woche haben wir…
ggplot2 erstelltHeute werden wir…
palmerpenguings gearbeitet
wir werden mit dem Paket pacman beginnen
p_load() nimmt Paketnamen als Argumentedies erspart uns, jedes Mal neue Pakete zu installieren
wir haben jetzt tidyverse und patchwork geladen und die neuen Pakete janitor und here installiert und geladen
daten in eurem .RProj für diesen Kurs!iris-Datensatz
view(): Datensatz öffnen
head() gibt die ersten 6 Zeilen der Daten ausglimpse()tibble
Rows: 150
Columns: 5
$ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.…
$ Sepal.Width <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.…
$ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.…
$ Petal.Width <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.…
$ Species <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, s…
summary()Aufgabe 1: table1
Beispiel 1
table1 zu ladenwir wollen normalerweise mit unseren eigenen Daten arbeiten, nicht mit eingebauten Spielzeugdaten
wir konzentrieren uns nur auf rechteckige Daten (d. h. aufgeräumte Daten)
Es gibt viele verschiedene Dateitypen, die Daten annehmen können, z. B. .xlsx, .txt, .csv, .tsv
csv ist der am häufigsten verwendete Dateityp: Kommagetrennte Werte (EN: Comma Separated Value)
.xlsx zu vermeiden; wenn ihr einen Excel-Datensatz habt, versucht, ihn als .csv zu speichern, bevor ihr ihn in R lestStudent ID,Full Name,favourite.food,mealPlan,AGE
1,Sunil Huffmann,Strawberry yoghurt,Lunch only,4
2,Barclay Lynn,French fries,Lunch only,5
3,Jayendra Lyne,N/A,Breakfast and lunch,7
4,Leon Rossini,Anchovies,Lunch only,
5,Chidiegwu Dunkel,Pizza,Breakfast and lunch,five
6,Güvenç Attila,Ice cream,Lunch only,6
die erste Zeile (die “Kopfzeile”) enthält die Spaltennamen
die folgenden Zeilen enthalten die Daten
Wie viele Variablen gibt es? Wie viele Beobachtungen?
readr Paketpenguins und iris gemacht haben
readr Paket (Teil von tidyverse) kann die meisten Datentypen einlesen| Student ID | Full Name | favourite.food | mealPlan | AGE |
|---|---|---|---|---|
| 1 | Sunil Huffmann | Strawberry yoghurt | Lunch only | 4 |
| 2 | Barclay Lynn | French fries | Lunch only | 5 |
| 3 | Jayendra Lyne | N/A | Breakfast and lunch | 7 |
| 4 | Leon Rossini | Anchovies | Lunch only | NA |
| 5 | Chidiegwu Dunkel | Pizza | Breakfast and lunch | five |
| 6 | Güvenç Attila | Ice cream | Lunch only | 6 |
here Pakethere::here() verwenden.here() startet, führt here() aus[1] "/Users/danielapalleschi/Documents/IdSL/Teaching/SoSe23/BA/ba_daten"
daten/students.csv).here PaketImage source: Allison Horst (all rights reserved)
here Pakethere Paket
Vor dem here-Paket mussten wir R explizit mitteilen, wo sich eine Datei auf unserem Computer befindet (z.B., /Users/danielapalleschi/Documents/IdSL/Teaching/SoSe23/BA/ba_daten/daten/students.csv), oder die Funktion setwd() (set Working Directory) benutzen, um R mitzuteilen, wo alle Dateien zu finden sind (z.B. setwd(/Users/danielapalleschi/Documents/IdSL/Teaching/SoSe23/BA/ba_daten)). Glücklicherweise brauchen wir diese absoluten Dateipfade oder setwd() nie zu verwenden!
Aus der here-Paketdokumentation:
The goal of the here package is to enable easy file referencing in project-oriented workflows. In contrast to using
setwd(), which is fragile and dependent on the way you organize your files, here uses the top-level directory of a project to easily build paths to files.
Das bedeutet, dass wir nun den großen Vorteil haben, dass wir unseren Projektordner überall hin verschieben können und unser Dateipfad immer noch relativ zu dem Ort ist, an den wir unseren Projektordner verschoben haben. Das bedeutet, dass das Projekt unabhängig davon läuft, wo es sich auf eurem Computer befindet. Ihr könnt auch jemandem den Projektordner schicken, und alles sollte auf dessen Rechner laufen!
Aufgabe 2: table1
Beispiel 2
students.csv und speichert ihn als Objekt mit dem Namen df_students.
df_ ist die Abkürzung für DataFrame; es ist eine gute Idee, ein Präfix vor Objektnamen zu verwenden, damit wir wissen, was jedes Objekt enthält.read_csv werden einige Informationen in der Konsole ausgegeben. Was wird gedruckt?df_students Datenrahmen habt ihr vielleicht einige NA oder N/A Werte bemerkt
N/A wurde als Text geschrieben und wird daher von R als solcher gelesen.NA in R bezieht sich auf fehlende Daten (EN: Not Available = DE: “Nicht verfügbar”)NAs), die nicht geplottet wurdenN/A in unseren df_students-Daten nicht wirklich als fehlender Wert gelesen wird.na = für die Funktion read_csv() verwenden
read_csv() mit, welche Werte mit fehlenden Werten gleichgesetzt werden sollen.# A tibble: 6 × 5
`Student ID` `Full Name` favourite.food mealPlan AGE
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Strawberry yoghurt Lunch only "4"
2 2 Barclay Lynn French fries Lunch only "5"
3 3 Jayendra Lyne <NA> Breakfast and lunch "7"
4 4 Leon Rossini Anchovies Lunch only ""
5 5 Chidiegwu Dunkel Pizza Breakfast and lunch "five"
6 6 Güvenç Attila Ice cream Lunch only "6"
N/A war, als NA gelesen
read_csv() leere Zellen als NA liest.
read_csv() anweisen, mehr als eine Art von Eingabe als NA zu lesen?"" und "N/A"x als NA liest# A tibble: 6 × 5
`Student ID` `Full Name` favourite.food mealPlan AGE
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Strawberry yoghurt Lunch only 4
2 2 Barclay Lynn French fries Lunch only 5
3 3 Jayendra Lyne <NA> Breakfast and lunch 7
4 4 Leon Rossini Anchovies Lunch only <NA>
5 5 Chidiegwu Dunkel Pizza Breakfast and lunch five
6 6 Güvenç Attila Ice cream Lunch only 6
df_students in der Konsole ausgeben, werden wir sehen, dass die ersten beiden Spaltennamen von Backticks umgeben sind (z.B. `Student ID`)
clean_names() aus dem Paket janitor
# A tibble: 6 × 5
student_id full_name favourite_food meal_plan age
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Strawberry yoghurt Lunch only 4
2 2 Barclay Lynn French fries Lunch only 5
3 3 Jayendra Lyne <NA> Breakfast and lunch 7
4 4 Leon Rossini Anchovies Lunch only <NA>
5 5 Chidiegwu Dunkel Pizza Breakfast and lunch five
6 6 Güvenç Attila Ice cream Lunch only 6
head(df_students) ausführen, sehen wir dann die bereinigten Spaltennamen?read_csv(), clean_names()) auf demselben Objekt ausführen wollen
# A tibble: 6 × 5
`Student ID` `Full Name` favourite.food mealPlan AGE
<dbl> <chr> <chr> <chr> <chr>
1 1 Sunil Huffmann Strawberry yoghurt Lunch only 4
2 2 Barclay Lynn French fries Lunch only 5
3 3 Jayendra Lyne N/A Breakfast and lunch 7
4 4 Leon Rossini Anchovies Lunch only <NA>
5 5 Chidiegwu Dunkel Pizza Breakfast and lunch five
6 6 Güvenç Attila Ice cream Lunch only 6
magrittr-Paket-Pipe: %>%
|>
%>%
Aufgabe 3: pipes
Beispiel 3
students.csv-Datensatz erneut mit festen NAs und dann
clean_names() auf dem Datensatz aufzurufen, und dann
head() aufstudents.csv erneut mit festen NAs und speichert ihn als Objekt df_students, und dann
clean_names() auf den Datensatz anzuwendenhead() verwenden, wenn man den Datensatz als Objekt speichert?read_csv() vertraut sind, sind die anderen Funktionen von readr einfach zu benutzen
read_csv2() liest Semikolon-getrennte Dateien
; anstelle von , zur Trennung von Feldern und sind in Ländern üblich, die , als Dezimalzeichen verwendenread_tsv() liest Tabulator-getrennte Dateienread_delim() liest Dateien mit beliebigen Begrenzungszeichen ein
delim = an (z. B. read_delim("students.csv", delim = ","))Andere habe ich noch nicht gebraucht:
read_fwf() liest Dateien mit fester Breiteread_table() liest eine gängige Variante von Dateien mit fester Breite, bei der die Spalten durch Leerzeichen getrennt sindread_log() liest Log-Dateien im Apache-StilAufgabe 4: filetypes
Beispiel 4
| getrennt sind?read_csv() und read_tsv() gemeinsam?nettle_1999_climate.csv ein
nettle_1999_climate2.csv ein
nettle_1999_climate3.csv ein
wenn wir kleine Datenmengen sammeln, möchten wir sie vielleicht von Hand in R eingeben
tibbles sind moderne Datenrahmen, macht euch noch keine Gedanken über die Definition eines Tibbles
Sammeln wir die Initialen, die Körpergröße (cm) und das Geburtsdatum (ttmm) von allen
tibble()tribble()Tribble) möglichAufgabe 6: tibbles
Beispiel 5
df_wir. initial height month day
Length:1 Min. :171 Min. :5 Min. :7
Class :character 1st Qu.:171 1st Qu.:5 1st Qu.:7
Mode :character Median :171 Median :5 Median :7
Mean :171 Mean :5 Mean :7
3rd Qu.:171 3rd Qu.:5 3rd Qu.:7
Max. :171 Max. :5 Max. :7
readr errät den Typ der Daten, die jede Spalte enthält
numerisch und kategorisch (= factor).factors enthalten Kategorien oder Gruppen von Daten, können aber manchmal wie numerische Daten aussehen.
month enthält zum Beispiel Zahlen, aber sie kann auch den Namen jedes Monats enthalten.numerischen Variable zu berechnen, aber nicht den eines factors.
$: Datenrahmen$Variable
sum) unserer Höhen berechnenwrite_csv(object_name, "desired_filename.csv")
here: write_csv(object_name, here::here("ordner", "desired_filename.csv"))
Hier findet ihr einige vertiefende Übungen.
starwars-Datensatz, der Informationen über Star Wars Charaktere enthält.csv Datei mit dem Namen starwars in euren daten Ordner.starwars.csv Datei mit read_csv().hair_colorskin_coloreye_colorsexgenderhomeworldspeciesErstellt die folgenden drei Diagramme und beschreibt kurz, was sie zeigen und welche Schlussfolgerungen daraus gezogen werden können.
Erstellt ein weiteres Diagramm eurer Wahl aus dem “Starwars”-Datensatz. Fügt sie in das Diagrammgitter ein (ihr müsst die Syntax anpassen). Beschreibt was sie zeigt.
Heute haben wir…
Hergestellt mit R version 4.2.3 (2023-03-15) (Shortstop Beagle) und RStudioversion 2023.3.0.386 (Cherry Blossom).
R version 4.2.3 (2023-03-15)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.2.1
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] kableExtra_1.3.4 patchwork_1.1.2 here_1.0.1 janitor_2.2.0
[5] lubridate_1.9.2 forcats_1.0.0 stringr_1.5.0 dplyr_1.1.1
[9] purrr_1.0.1 readr_2.1.4 tidyr_1.3.0 tibble_3.2.1
[13] ggplot2_3.4.2 tidyverse_2.0.0
loaded via a namespace (and not attached):
[1] tidyselect_1.2.0 xfun_0.38 snakecase_0.11.0 colorspace_2.1-0
[5] vctrs_0.6.1 generics_0.1.3 viridisLite_0.4.1 htmltools_0.5.5
[9] yaml_2.3.7 utf8_1.2.3 rlang_1.1.0 pillar_1.9.0
[13] glue_1.6.2 withr_2.5.0 RColorBrewer_1.1-3 bit64_4.0.5
[17] lifecycle_1.0.3 munsell_0.5.0 gtable_0.3.3 rvest_1.0.3
[21] evaluate_0.20 labeling_0.4.2 knitr_1.42 tzdb_0.3.0
[25] fastmap_1.1.1 parallel_4.2.3 fansi_1.0.4 highr_0.10
[29] scales_1.2.1 webshot_0.5.4 vroom_1.6.1 jsonlite_1.8.4
[33] farver_2.1.1 systemfonts_1.0.4 bit_4.0.5 hms_1.1.3
[37] digest_0.6.31 stringi_1.7.12 grid_4.2.3 rprojroot_2.0.3
[41] cli_3.6.1 tools_4.2.3 magrittr_2.0.3 pacman_0.5.1
[45] crayon_1.5.2 pkgconfig_2.0.3 xml2_1.3.3 timechange_0.2.0
[49] rmarkdown_2.21 svglite_2.1.1 httr_1.4.5 rstudioapi_0.14
[53] R6_2.5.1 compiler_4.2.3
Woche 4 - Datenimport